home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / JLayeredPane.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  6.3 KB  |  345 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Graphics;
  7. import java.awt.LayoutManager;
  8. import java.awt.Rectangle;
  9. import java.util.Hashtable;
  10. import javax.accessibility.Accessible;
  11. import javax.accessibility.AccessibleContext;
  12.  
  13. public class JLayeredPane extends JComponent implements Accessible {
  14.    public static final Integer DEFAULT_LAYER = new Integer(0);
  15.    public static final Integer PALETTE_LAYER = new Integer(100);
  16.    public static final Integer MODAL_LAYER = new Integer(200);
  17.    public static final Integer POPUP_LAYER = new Integer(300);
  18.    public static final Integer DRAG_LAYER = new Integer(400);
  19.    public static final Integer FRAME_CONTENT_LAYER = new Integer(-30000);
  20.    public static final String LAYER_PROPERTY = "layeredContainerLayer";
  21.    private Hashtable componentToLayer;
  22.    private boolean optimizedDrawingPossible = true;
  23.  
  24.    public JLayeredPane() {
  25.       ((Container)this).setLayout((LayoutManager)null);
  26.    }
  27.  
  28.    protected void addImpl(Component var1, Object var2, int var3) {
  29.       int var4 = DEFAULT_LAYER;
  30.       if (var2 instanceof Integer) {
  31.          var4 = (Integer)var2;
  32.          this.setLayer(var1, var4);
  33.       } else {
  34.          var4 = this.getLayer(var1);
  35.       }
  36.  
  37.       int var5 = this.insertIndexForLayer(var4, var3);
  38.       super.addImpl(var1, var2, var5);
  39.       var1.validate();
  40.       var1.repaint();
  41.       this.validateOptimizedDrawing();
  42.    }
  43.  
  44.    public AccessibleContext getAccessibleContext() {
  45.       if (super.accessibleContext == null) {
  46.          super.accessibleContext = new AccessibleJLayeredPane(this);
  47.       }
  48.  
  49.       return super.accessibleContext;
  50.    }
  51.  
  52.    public int getComponentCountInLayer(int var1) {
  53.       int var5 = 0;
  54.       int var3 = ((Container)this).getComponentCount();
  55.  
  56.       for(int var2 = 0; var2 < var3; ++var2) {
  57.          int var4 = this.getLayer(((Container)this).getComponent(var2));
  58.          if (var4 == var1) {
  59.             ++var5;
  60.          } else if (var5 > 0 || var4 < var1) {
  61.             break;
  62.          }
  63.       }
  64.  
  65.       return var5;
  66.    }
  67.  
  68.    protected Hashtable getComponentToLayer() {
  69.       if (this.componentToLayer == null) {
  70.          this.componentToLayer = new Hashtable(4);
  71.       }
  72.  
  73.       return this.componentToLayer;
  74.    }
  75.  
  76.    public Component[] getComponentsInLayer(int var1) {
  77.       int var5 = 0;
  78.       Component[] var6 = new Component[this.getComponentCountInLayer(var1)];
  79.       int var3 = ((Container)this).getComponentCount();
  80.  
  81.       for(int var2 = 0; var2 < var3; ++var2) {
  82.          int var4 = this.getLayer(((Container)this).getComponent(var2));
  83.          if (var4 == var1) {
  84.             var6[var5++] = ((Container)this).getComponent(var2);
  85.          } else if (var5 > 0 || var4 < var1) {
  86.             break;
  87.          }
  88.       }
  89.  
  90.       return var6;
  91.    }
  92.  
  93.    public int getIndexOf(Component var1) {
  94.       int var3 = ((Container)this).getComponentCount();
  95.  
  96.       for(int var2 = 0; var2 < var3; ++var2) {
  97.          if (var1 == ((Container)this).getComponent(var2)) {
  98.             return var2;
  99.          }
  100.       }
  101.  
  102.       return -1;
  103.    }
  104.  
  105.    public int getLayer(Component var1) {
  106.       Integer var2;
  107.       if (var1 instanceof JComponent) {
  108.          var2 = (Integer)((JComponent)var1).getClientProperty("layeredContainerLayer");
  109.       } else {
  110.          var2 = (Integer)this.getComponentToLayer().get(var1);
  111.       }
  112.  
  113.       return var2 == null ? DEFAULT_LAYER : var2;
  114.    }
  115.  
  116.    public static int getLayer(JComponent var0) {
  117.       Integer var1;
  118.       return (var1 = (Integer)var0.getClientProperty("layeredContainerLayer")) != null ? var1 : DEFAULT_LAYER;
  119.    }
  120.  
  121.    public static JLayeredPane getLayeredPaneAbove(Component var0) {
  122.       if (var0 == null) {
  123.          return null;
  124.       } else {
  125.          Container var1;
  126.          for(var1 = var0.getParent(); var1 != null && !(var1 instanceof JLayeredPane); var1 = ((Component)var1).getParent()) {
  127.          }
  128.  
  129.          return (JLayeredPane)var1;
  130.       }
  131.    }
  132.  
  133.    protected Integer getObjectForLayer(int var1) {
  134.       Integer var2;
  135.       switch (var1) {
  136.          case 0:
  137.             var2 = DEFAULT_LAYER;
  138.             break;
  139.          case 100:
  140.             var2 = PALETTE_LAYER;
  141.             break;
  142.          case 200:
  143.             var2 = MODAL_LAYER;
  144.             break;
  145.          case 300:
  146.             var2 = POPUP_LAYER;
  147.             break;
  148.          case 400:
  149.             var2 = DRAG_LAYER;
  150.             break;
  151.          default:
  152.             var2 = new Integer(var1);
  153.       }
  154.  
  155.       return var2;
  156.    }
  157.  
  158.    public int getPosition(Component var1) {
  159.       int var7 = 0;
  160.       int var3 = ((Container)this).getComponentCount();
  161.       int var6 = this.getIndexOf(var1);
  162.       if (var6 == -1) {
  163.          return -1;
  164.       } else {
  165.          int var4 = this.getLayer(var1);
  166.  
  167.          for(int var2 = var6 - 1; var2 >= 0; --var2) {
  168.             int var5 = this.getLayer(((Container)this).getComponent(var2));
  169.             if (var5 != var4) {
  170.                return var7;
  171.             }
  172.  
  173.             ++var7;
  174.          }
  175.  
  176.          return var7;
  177.       }
  178.    }
  179.  
  180.    public int highestLayer() {
  181.       return ((Container)this).getComponentCount() > 0 ? this.getLayer(((Container)this).getComponent(0)) : 0;
  182.    }
  183.  
  184.    protected int insertIndexForLayer(int var1, int var2) {
  185.       int var6 = -1;
  186.       int var7 = -1;
  187.       int var4 = ((Container)this).getComponentCount();
  188.  
  189.       for(int var3 = 0; var3 < var4; ++var3) {
  190.          int var5 = this.getLayer(((Container)this).getComponent(var3));
  191.          if (var6 == -1 && var5 == var1) {
  192.             var6 = var3;
  193.          }
  194.  
  195.          if (var5 < var1) {
  196.             if (var3 == 0) {
  197.                var6 = 0;
  198.                var7 = 0;
  199.             } else {
  200.                var7 = var3;
  201.             }
  202.             break;
  203.          }
  204.       }
  205.  
  206.       if (var6 == -1 && var7 == -1) {
  207.          return var4;
  208.       } else {
  209.          if (var6 != -1 && var7 == -1) {
  210.             var7 = var4;
  211.          }
  212.  
  213.          if (var7 != -1 && var6 == -1) {
  214.             var6 = var7;
  215.          }
  216.  
  217.          if (var2 == -1) {
  218.             return var7;
  219.          } else {
  220.             return var2 > -1 && var6 + var2 <= var7 ? var6 + var2 : var7;
  221.          }
  222.       }
  223.    }
  224.  
  225.    public boolean isOptimizedDrawingEnabled() {
  226.       return this.optimizedDrawingPossible;
  227.    }
  228.  
  229.    public int lowestLayer() {
  230.       int var1 = ((Container)this).getComponentCount();
  231.       return var1 > 0 ? this.getLayer(((Container)this).getComponent(var1 - 1)) : 0;
  232.    }
  233.  
  234.    public void moveToBack(Component var1) {
  235.       this.setPosition(var1, this.getComponentCountInLayer(this.getLayer(var1)));
  236.    }
  237.  
  238.    public void moveToFront(Component var1) {
  239.       this.setPosition(var1, 0);
  240.    }
  241.  
  242.    public void paint(Graphics var1) {
  243.       if (((JComponent)this).isOpaque()) {
  244.          Rectangle var2 = var1.getClipBounds();
  245.          Color var3 = ((Component)this).getBackground();
  246.          if (var3 == null) {
  247.             var3 = Color.lightGray;
  248.          }
  249.  
  250.          var1.setColor(var3);
  251.          var1.fillRect(var2.x, var2.y, var2.width, var2.height);
  252.       }
  253.  
  254.       super.paint(var1);
  255.    }
  256.  
  257.    protected String paramString() {
  258.       String var1 = this.optimizedDrawingPossible ? "true" : "false";
  259.       return super.paramString() + ",optimizedDrawingPossible=" + var1;
  260.    }
  261.  
  262.    public static void putLayer(JComponent var0, int var1) {
  263.       Integer var2 = new Integer(var1);
  264.       var0.putClientProperty("layeredContainerLayer", var2);
  265.    }
  266.  
  267.    public void remove(int var1) {
  268.       ((Container)this).getComponent(var1);
  269.       super.remove(var1);
  270.       this.validateOptimizedDrawing();
  271.    }
  272.  
  273.    public void setLayer(Component var1, int var2) {
  274.       this.setLayer(var1, var2, -1);
  275.    }
  276.  
  277.    public void setLayer(Component var1, int var2, int var3) {
  278.       Integer var4 = this.getObjectForLayer(var2);
  279.       if (var2 == this.getLayer(var1) && var3 == this.getPosition(var1)) {
  280.          if (var1 instanceof JComponent) {
  281.             ((JComponent)this).repaint(((JComponent)var1)._bounds);
  282.          } else {
  283.             ((JComponent)this).repaint(var1.getBounds());
  284.          }
  285.  
  286.       } else {
  287.          if (var1 instanceof JComponent) {
  288.             ((JComponent)var1).putClientProperty("layeredContainerLayer", var4);
  289.          } else {
  290.             this.getComponentToLayer().put(var1, var4);
  291.          }
  292.  
  293.          if (var1.getParent() != null && var1.getParent() == this) {
  294.             ((Container)this).remove(var1);
  295.             ((Container)this).add(var1, (Object)null, var3);
  296.             if (var1 instanceof JComponent) {
  297.                ((JComponent)this).repaint(((JComponent)var1)._bounds);
  298.             } else {
  299.                ((JComponent)this).repaint(var1.getBounds());
  300.             }
  301.  
  302.          } else {
  303.             if (var1 instanceof JComponent) {
  304.                ((JComponent)this).repaint(((JComponent)var1)._bounds);
  305.             } else {
  306.                ((JComponent)this).repaint(var1.getBounds());
  307.             }
  308.  
  309.          }
  310.       }
  311.    }
  312.  
  313.    public void setPosition(Component var1, int var2) {
  314.       this.setLayer(var1, this.getLayer(var1), var2);
  315.    }
  316.  
  317.    private void validateOptimizedDrawing() {
  318.       boolean var1 = false;
  319.       Object var2 = ((Component)this).getTreeLock();
  320.       synchronized(var2){}
  321.  
  322.       try {
  323.          Object var6 = null;
  324.          int var4 = 0;
  325.  
  326.          for(int var5 = ((Container)this).getComponentCount(); var4 < var5; ++var4) {
  327.             Integer var9 = null;
  328.             if ((((Container)this).getComponent(var4) instanceof JInternalFrame || ((Container)this).getComponent(var4) instanceof JComponent && (var9 = (Integer)((JComponent)((Container)this).getComponent(var4)).getClientProperty("layeredContainerLayer")) != null) && (var9 == null || !var9.equals(FRAME_CONTENT_LAYER))) {
  329.                var1 = true;
  330.                break;
  331.             }
  332.          }
  333.       } catch (Throwable var8) {
  334.          throw var8;
  335.       }
  336.  
  337.       if (var1) {
  338.          this.optimizedDrawingPossible = false;
  339.       } else {
  340.          this.optimizedDrawingPossible = true;
  341.       }
  342.  
  343.    }
  344. }
  345.